﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Negocio;

public partial class Seguridad_frmUsuarioABM : System.Web.UI.Page
{
    Usuario objeto;
    EstadoABM estadoABM;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SetModo(EstadoABM.Seleccionar);
            CargarControles();
            CargarGrilla(Usuario.ObtenerTodos());
        }
        else
        {
            if(Session["UsuarioABM"] != null)
            {
                objeto = (Usuario)Session["UsuarioABM"];
            }
        }
    }
    protected void butNuevo_Click(object sender, EventArgs e)
    {
        Limpiar();
        objeto = new Usuario();
        SetModo(EstadoABM.Modificar);
        txtLogin.Focus();
        Session["UsuarioABM"] = objeto;
    }
    protected void butModificar_Click(object sender, EventArgs e)
    {
        SetModo(EstadoABM.Modificar);
        txtLogin.Enabled = false;
        txtClave.Focus();
    }
    protected void butEliminar_Click(object sender, EventArgs e)
    {
        objeto.Borrar();
        objeto.Persistir();
        objeto = null;
        Limpiar();
        SetModo(EstadoABM.Seleccionar);
        CargarGrilla(Usuario.ObtenerTodos());
    }
    protected void butAceptar_Click(object sender, EventArgs e)
    {
        CopiarDatos();
        objeto.Persistir();
        CargarObjetoConModoVer();
        CargarGrilla(Usuario.ObtenerTodos());
    }
    protected void butCancelar_Click(object sender, EventArgs e)
    {
        if (objeto.Nuevo)
        {
            Limpiar();
            SetModo(EstadoABM.Seleccionar);
        }
        else
        {
            CargarObjetoConModoVer();
        }
    }

    #region Funciones Protected

    protected void Limpiar()
    {
        txtLogin.Text = string.Empty;
        txtClave.Text = string.Empty;
        txtConfirmacion.Text = string.Empty;
    }

    protected void CargarObjetoConModoVer()
    {
        txtLogin.Text = objeto.Login;
        txtClave.Text = objeto.Clave;
        txtConfirmacion.Text = objeto.Clave;
        SetModo(EstadoABM.Ver); 
    }

    protected void CopiarDatos()
    {
       objeto.Login = txtLogin.Text;
       objeto.Clave = txtClave.Text;
    }
    

    protected void HabilitarControles(bool enable)
    {
        txtLogin.Enabled = enable;
        txtClave.Enabled = enable;
        txtConfirmacion.Enabled = enable;
    }


    protected void CargarControles()
    {
        Delivery hdMaster = (Delivery)this.Master;
        ((Label)hdMaster.FindControl("lblTitulo")).Text = this.Title;
    }

    protected void CargarGrilla(List<Usuario> Usuarios)
    {
        grvDatos.DataSource = Usuarios;
        string[] keys = { "login" };
        grvDatos.DataKeyNames = keys;
        grvDatos.DataBind();
    }

    protected void SetModo(EstadoABM estado)
    {
        estadoABM = estado;
        switch (estado)
        {
            case EstadoABM.Seleccionar:
                //Habilitar solo Nuevo
                butAceptar.Enabled = false;
                butCancelar.Enabled = false;
                butNuevo.Enabled = true;
                butModificar.Enabled = false;
                butEliminar.Enabled = false;
                HabilitarControles(false);
                break;

            case EstadoABM.Ver:
                //Habilitar solo Nuevo, Modificar y Eliminar
                butAceptar.Enabled = false;
                butCancelar.Enabled = false;
                butNuevo.Enabled = true;
                butModificar.Enabled = true;
                butEliminar.Enabled = true;
                HabilitarControles(false);
                break;

            case EstadoABM.Modificar:
                //Habilitar solo Aceptar y Cancelar
                butAceptar.Enabled = true;
                butCancelar.Enabled = true;
                butNuevo.Enabled = false;
                butModificar.Enabled = false;
                butEliminar.Enabled = false;
                HabilitarControles(true);
                break;
            default:
                break;
        }
    }
    protected enum EstadoABM
    {
        Ver,
        Modificar,
        Seleccionar
    }
    #endregion
    protected void grvDatos_SelectedIndexChanged(object sender, EventArgs e)
    {
        objeto = Usuario.ObtenerPorLogin( grvDatos.SelectedDataKey[0].ToString());
        CargarObjetoConModoVer();
        Session["UsuarioABM"] = objeto;
    }
    protected void grvDatos_PageIndexChanged(object sender, EventArgs e)
    {

    }
    protected void grvDatos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvDatos.PageIndex = e.NewPageIndex;
        CargarGrilla(Usuario.ObtenerTodos());        
    }
    protected void butBuscar_Click(object sender, EventArgs e)
    {
        if (txtFiltroLogin.Text != string.Empty)
        {
            CargarGrilla(Usuario.ObtenerPorFiltro(txtFiltroLogin.Text));
        }
        else 
        {
            CargarGrilla(Usuario.ObtenerTodos());
        }
    }    
}
